/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
"use strict";

var $protobuf = require("protobufjs/minimal");

// Common aliases
var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;

// Exported root namespace
var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});

$root.CS_LOGIN = (function() {

    /**
     * Properties of a CS_LOGIN.
     * @exports ICS_LOGIN
     * @interface ICS_LOGIN
     * @property {string|null} [token] CS_LOGIN token
     * @property {string|null} [extra] CS_LOGIN extra
     */

    /**
     * Constructs a new CS_LOGIN.
     * @exports CS_LOGIN
     * @classdesc Represents a CS_LOGIN.
     * @implements ICS_LOGIN
     * @constructor
     * @param {ICS_LOGIN=} [p] Properties to set
     */
    function CS_LOGIN(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * CS_LOGIN token.
     * @member {string} token
     * @memberof CS_LOGIN
     * @instance
     */
    CS_LOGIN.prototype.token = "";

    /**
     * CS_LOGIN extra.
     * @member {string} extra
     * @memberof CS_LOGIN
     * @instance
     */
    CS_LOGIN.prototype.extra = "";

    /**
     * Creates a new CS_LOGIN instance using the specified properties.
     * @function create
     * @memberof CS_LOGIN
     * @static
     * @param {ICS_LOGIN=} [properties] Properties to set
     * @returns {CS_LOGIN} CS_LOGIN instance
     */
    CS_LOGIN.create = function create(properties) {
        return new CS_LOGIN(properties);
    };

    /**
     * Encodes the specified CS_LOGIN message. Does not implicitly {@link CS_LOGIN.verify|verify} messages.
     * @function encode
     * @memberof CS_LOGIN
     * @static
     * @param {ICS_LOGIN} m CS_LOGIN message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    CS_LOGIN.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.token != null && Object.hasOwnProperty.call(m, "token"))
            w.uint32(10).string(m.token);
        if (m.extra != null && Object.hasOwnProperty.call(m, "extra"))
            w.uint32(18).string(m.extra);
        return w;
    };

    /**
     * Decodes a CS_LOGIN message from the specified reader or buffer.
     * @function decode
     * @memberof CS_LOGIN
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {CS_LOGIN} CS_LOGIN
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    CS_LOGIN.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.CS_LOGIN();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.token = r.string();
                    break;
                }
            case 2: {
                    m.extra = r.string();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for CS_LOGIN
     * @function getTypeUrl
     * @memberof CS_LOGIN
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    CS_LOGIN.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/CS_LOGIN";
    };

    return CS_LOGIN;
})();

$root.PLAYER_DATA = (function() {

    /**
     * Properties of a PLAYER_DATA.
     * @exports IPLAYER_DATA
     * @interface IPLAYER_DATA
     * @property {string|null} [id] PLAYER_DATA id
     * @property {string|null} [name] PLAYER_DATA name
     * @property {number|null} [coin] PLAYER_DATA coin
     * @property {number|null} [level] PLAYER_DATA level
     * @property {number|null} [exp] PLAYER_DATA exp
     * @property {number|null} [vip] PLAYER_DATA vip
     * @property {number|null} [roomId] PLAYER_DATA roomId
     */

    /**
     * Constructs a new PLAYER_DATA.
     * @exports PLAYER_DATA
     * @classdesc Represents a PLAYER_DATA.
     * @implements IPLAYER_DATA
     * @constructor
     * @param {IPLAYER_DATA=} [p] Properties to set
     */
    function PLAYER_DATA(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * PLAYER_DATA id.
     * @member {string} id
     * @memberof PLAYER_DATA
     * @instance
     */
    PLAYER_DATA.prototype.id = "";

    /**
     * PLAYER_DATA name.
     * @member {string} name
     * @memberof PLAYER_DATA
     * @instance
     */
    PLAYER_DATA.prototype.name = "";

    /**
     * PLAYER_DATA coin.
     * @member {number} coin
     * @memberof PLAYER_DATA
     * @instance
     */
    PLAYER_DATA.prototype.coin = 0;

    /**
     * PLAYER_DATA level.
     * @member {number} level
     * @memberof PLAYER_DATA
     * @instance
     */
    PLAYER_DATA.prototype.level = 0;

    /**
     * PLAYER_DATA exp.
     * @member {number} exp
     * @memberof PLAYER_DATA
     * @instance
     */
    PLAYER_DATA.prototype.exp = 0;

    /**
     * PLAYER_DATA vip.
     * @member {number} vip
     * @memberof PLAYER_DATA
     * @instance
     */
    PLAYER_DATA.prototype.vip = 0;

    /**
     * PLAYER_DATA roomId.
     * @member {number|null|undefined} roomId
     * @memberof PLAYER_DATA
     * @instance
     */
    PLAYER_DATA.prototype.roomId = null;

    // OneOf field names bound to virtual getters and setters
    var $oneOfFields;

    // Virtual OneOf for proto3 optional field
    Object.defineProperty(PLAYER_DATA.prototype, "_roomId", {
        get: $util.oneOfGetter($oneOfFields = ["roomId"]),
        set: $util.oneOfSetter($oneOfFields)
    });

    /**
     * Creates a new PLAYER_DATA instance using the specified properties.
     * @function create
     * @memberof PLAYER_DATA
     * @static
     * @param {IPLAYER_DATA=} [properties] Properties to set
     * @returns {PLAYER_DATA} PLAYER_DATA instance
     */
    PLAYER_DATA.create = function create(properties) {
        return new PLAYER_DATA(properties);
    };

    /**
     * Encodes the specified PLAYER_DATA message. Does not implicitly {@link PLAYER_DATA.verify|verify} messages.
     * @function encode
     * @memberof PLAYER_DATA
     * @static
     * @param {IPLAYER_DATA} m PLAYER_DATA message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    PLAYER_DATA.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.id != null && Object.hasOwnProperty.call(m, "id"))
            w.uint32(10).string(m.id);
        if (m.name != null && Object.hasOwnProperty.call(m, "name"))
            w.uint32(18).string(m.name);
        if (m.coin != null && Object.hasOwnProperty.call(m, "coin"))
            w.uint32(24).int32(m.coin);
        if (m.level != null && Object.hasOwnProperty.call(m, "level"))
            w.uint32(32).int32(m.level);
        if (m.exp != null && Object.hasOwnProperty.call(m, "exp"))
            w.uint32(40).int32(m.exp);
        if (m.vip != null && Object.hasOwnProperty.call(m, "vip"))
            w.uint32(48).int32(m.vip);
        if (m.roomId != null && Object.hasOwnProperty.call(m, "roomId"))
            w.uint32(56).int32(m.roomId);
        return w;
    };

    /**
     * Decodes a PLAYER_DATA message from the specified reader or buffer.
     * @function decode
     * @memberof PLAYER_DATA
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {PLAYER_DATA} PLAYER_DATA
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    PLAYER_DATA.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.PLAYER_DATA();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.id = r.string();
                    break;
                }
            case 2: {
                    m.name = r.string();
                    break;
                }
            case 3: {
                    m.coin = r.int32();
                    break;
                }
            case 4: {
                    m.level = r.int32();
                    break;
                }
            case 5: {
                    m.exp = r.int32();
                    break;
                }
            case 6: {
                    m.vip = r.int32();
                    break;
                }
            case 7: {
                    m.roomId = r.int32();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for PLAYER_DATA
     * @function getTypeUrl
     * @memberof PLAYER_DATA
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    PLAYER_DATA.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/PLAYER_DATA";
    };

    return PLAYER_DATA;
})();

$root.SC_LOGIN = (function() {

    /**
     * Properties of a SC_LOGIN.
     * @exports ISC_LOGIN
     * @interface ISC_LOGIN
     * @property {number|null} [code] SC_LOGIN code
     * @property {string|null} [msg] SC_LOGIN msg
     * @property {IPLAYER_DATA|null} [player] SC_LOGIN player
     */

    /**
     * Constructs a new SC_LOGIN.
     * @exports SC_LOGIN
     * @classdesc Represents a SC_LOGIN.
     * @implements ISC_LOGIN
     * @constructor
     * @param {ISC_LOGIN=} [p] Properties to set
     */
    function SC_LOGIN(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_LOGIN code.
     * @member {number} code
     * @memberof SC_LOGIN
     * @instance
     */
    SC_LOGIN.prototype.code = 0;

    /**
     * SC_LOGIN msg.
     * @member {string|null|undefined} msg
     * @memberof SC_LOGIN
     * @instance
     */
    SC_LOGIN.prototype.msg = null;

    /**
     * SC_LOGIN player.
     * @member {IPLAYER_DATA|null|undefined} player
     * @memberof SC_LOGIN
     * @instance
     */
    SC_LOGIN.prototype.player = null;

    // OneOf field names bound to virtual getters and setters
    var $oneOfFields;

    // Virtual OneOf for proto3 optional field
    Object.defineProperty(SC_LOGIN.prototype, "_msg", {
        get: $util.oneOfGetter($oneOfFields = ["msg"]),
        set: $util.oneOfSetter($oneOfFields)
    });

    // Virtual OneOf for proto3 optional field
    Object.defineProperty(SC_LOGIN.prototype, "_player", {
        get: $util.oneOfGetter($oneOfFields = ["player"]),
        set: $util.oneOfSetter($oneOfFields)
    });

    /**
     * Creates a new SC_LOGIN instance using the specified properties.
     * @function create
     * @memberof SC_LOGIN
     * @static
     * @param {ISC_LOGIN=} [properties] Properties to set
     * @returns {SC_LOGIN} SC_LOGIN instance
     */
    SC_LOGIN.create = function create(properties) {
        return new SC_LOGIN(properties);
    };

    /**
     * Encodes the specified SC_LOGIN message. Does not implicitly {@link SC_LOGIN.verify|verify} messages.
     * @function encode
     * @memberof SC_LOGIN
     * @static
     * @param {ISC_LOGIN} m SC_LOGIN message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_LOGIN.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.code != null && Object.hasOwnProperty.call(m, "code"))
            w.uint32(8).int32(m.code);
        if (m.msg != null && Object.hasOwnProperty.call(m, "msg"))
            w.uint32(18).string(m.msg);
        if (m.player != null && Object.hasOwnProperty.call(m, "player"))
            $root.PLAYER_DATA.encode(m.player, w.uint32(26).fork()).ldelim();
        return w;
    };

    /**
     * Decodes a SC_LOGIN message from the specified reader or buffer.
     * @function decode
     * @memberof SC_LOGIN
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_LOGIN} SC_LOGIN
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_LOGIN.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_LOGIN();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.code = r.int32();
                    break;
                }
            case 2: {
                    m.msg = r.string();
                    break;
                }
            case 3: {
                    m.player = $root.PLAYER_DATA.decode(r, r.uint32());
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for SC_LOGIN
     * @function getTypeUrl
     * @memberof SC_LOGIN
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_LOGIN.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_LOGIN";
    };

    return SC_LOGIN;
})();

$root.SC_LOGOUT = (function() {

    /**
     * Properties of a SC_LOGOUT.
     * @exports ISC_LOGOUT
     * @interface ISC_LOGOUT
     * @property {number|null} [code] SC_LOGOUT code
     */

    /**
     * Constructs a new SC_LOGOUT.
     * @exports SC_LOGOUT
     * @classdesc Represents a SC_LOGOUT.
     * @implements ISC_LOGOUT
     * @constructor
     * @param {ISC_LOGOUT=} [p] Properties to set
     */
    function SC_LOGOUT(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_LOGOUT code.
     * @member {number} code
     * @memberof SC_LOGOUT
     * @instance
     */
    SC_LOGOUT.prototype.code = 0;

    /**
     * Creates a new SC_LOGOUT instance using the specified properties.
     * @function create
     * @memberof SC_LOGOUT
     * @static
     * @param {ISC_LOGOUT=} [properties] Properties to set
     * @returns {SC_LOGOUT} SC_LOGOUT instance
     */
    SC_LOGOUT.create = function create(properties) {
        return new SC_LOGOUT(properties);
    };

    /**
     * Encodes the specified SC_LOGOUT message. Does not implicitly {@link SC_LOGOUT.verify|verify} messages.
     * @function encode
     * @memberof SC_LOGOUT
     * @static
     * @param {ISC_LOGOUT} m SC_LOGOUT message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_LOGOUT.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.code != null && Object.hasOwnProperty.call(m, "code"))
            w.uint32(8).int32(m.code);
        return w;
    };

    /**
     * Decodes a SC_LOGOUT message from the specified reader or buffer.
     * @function decode
     * @memberof SC_LOGOUT
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_LOGOUT} SC_LOGOUT
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_LOGOUT.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_LOGOUT();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.code = r.int32();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for SC_LOGOUT
     * @function getTypeUrl
     * @memberof SC_LOGOUT
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_LOGOUT.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_LOGOUT";
    };

    return SC_LOGOUT;
})();

$root.SC_KICK = (function() {

    /**
     * Properties of a SC_KICK.
     * @exports ISC_KICK
     * @interface ISC_KICK
     * @property {number|null} [code] SC_KICK code
     */

    /**
     * Constructs a new SC_KICK.
     * @exports SC_KICK
     * @classdesc Represents a SC_KICK.
     * @implements ISC_KICK
     * @constructor
     * @param {ISC_KICK=} [p] Properties to set
     */
    function SC_KICK(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_KICK code.
     * @member {number} code
     * @memberof SC_KICK
     * @instance
     */
    SC_KICK.prototype.code = 0;

    /**
     * Creates a new SC_KICK instance using the specified properties.
     * @function create
     * @memberof SC_KICK
     * @static
     * @param {ISC_KICK=} [properties] Properties to set
     * @returns {SC_KICK} SC_KICK instance
     */
    SC_KICK.create = function create(properties) {
        return new SC_KICK(properties);
    };

    /**
     * Encodes the specified SC_KICK message. Does not implicitly {@link SC_KICK.verify|verify} messages.
     * @function encode
     * @memberof SC_KICK
     * @static
     * @param {ISC_KICK} m SC_KICK message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_KICK.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.code != null && Object.hasOwnProperty.call(m, "code"))
            w.uint32(8).int32(m.code);
        return w;
    };

    /**
     * Decodes a SC_KICK message from the specified reader or buffer.
     * @function decode
     * @memberof SC_KICK
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_KICK} SC_KICK
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_KICK.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_KICK();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.code = r.int32();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for SC_KICK
     * @function getTypeUrl
     * @memberof SC_KICK
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_KICK.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_KICK";
    };

    return SC_KICK;
})();

$root.ROOM_PLAYER = (function() {

    /**
     * Properties of a ROOM_PLAYER.
     * @exports IROOM_PLAYER
     * @interface IROOM_PLAYER
     * @property {number|null} [seat] ROOM_PLAYER seat
     * @property {IPLAYER_DATA|null} [playerInfo] ROOM_PLAYER playerInfo
     */

    /**
     * Constructs a new ROOM_PLAYER.
     * @exports ROOM_PLAYER
     * @classdesc Represents a ROOM_PLAYER.
     * @implements IROOM_PLAYER
     * @constructor
     * @param {IROOM_PLAYER=} [p] Properties to set
     */
    function ROOM_PLAYER(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * ROOM_PLAYER seat.
     * @member {number} seat
     * @memberof ROOM_PLAYER
     * @instance
     */
    ROOM_PLAYER.prototype.seat = 0;

    /**
     * ROOM_PLAYER playerInfo.
     * @member {IPLAYER_DATA|null|undefined} playerInfo
     * @memberof ROOM_PLAYER
     * @instance
     */
    ROOM_PLAYER.prototype.playerInfo = null;

    /**
     * Creates a new ROOM_PLAYER instance using the specified properties.
     * @function create
     * @memberof ROOM_PLAYER
     * @static
     * @param {IROOM_PLAYER=} [properties] Properties to set
     * @returns {ROOM_PLAYER} ROOM_PLAYER instance
     */
    ROOM_PLAYER.create = function create(properties) {
        return new ROOM_PLAYER(properties);
    };

    /**
     * Encodes the specified ROOM_PLAYER message. Does not implicitly {@link ROOM_PLAYER.verify|verify} messages.
     * @function encode
     * @memberof ROOM_PLAYER
     * @static
     * @param {IROOM_PLAYER} m ROOM_PLAYER message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    ROOM_PLAYER.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.seat != null && Object.hasOwnProperty.call(m, "seat"))
            w.uint32(8).int32(m.seat);
        if (m.playerInfo != null && Object.hasOwnProperty.call(m, "playerInfo"))
            $root.PLAYER_DATA.encode(m.playerInfo, w.uint32(18).fork()).ldelim();
        return w;
    };

    /**
     * Decodes a ROOM_PLAYER message from the specified reader or buffer.
     * @function decode
     * @memberof ROOM_PLAYER
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {ROOM_PLAYER} ROOM_PLAYER
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    ROOM_PLAYER.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.ROOM_PLAYER();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.seat = r.int32();
                    break;
                }
            case 2: {
                    m.playerInfo = $root.PLAYER_DATA.decode(r, r.uint32());
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for ROOM_PLAYER
     * @function getTypeUrl
     * @memberof ROOM_PLAYER
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    ROOM_PLAYER.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/ROOM_PLAYER";
    };

    return ROOM_PLAYER;
})();

$root.ROOM_DATA = (function() {

    /**
     * Properties of a ROOM_DATA.
     * @exports IROOM_DATA
     * @interface IROOM_DATA
     * @property {number|null} [id] ROOM_DATA id
     * @property {string|null} [gameName] ROOM_DATA gameName
     * @property {number|null} [owner] ROOM_DATA owner
     * @property {Object.<string,IROOM_PLAYER>|null} [players] ROOM_DATA players
     */

    /**
     * Constructs a new ROOM_DATA.
     * @exports ROOM_DATA
     * @classdesc Represents a ROOM_DATA.
     * @implements IROOM_DATA
     * @constructor
     * @param {IROOM_DATA=} [p] Properties to set
     */
    function ROOM_DATA(p) {
        this.players = {};
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * ROOM_DATA id.
     * @member {number} id
     * @memberof ROOM_DATA
     * @instance
     */
    ROOM_DATA.prototype.id = 0;

    /**
     * ROOM_DATA gameName.
     * @member {string} gameName
     * @memberof ROOM_DATA
     * @instance
     */
    ROOM_DATA.prototype.gameName = "";

    /**
     * ROOM_DATA owner.
     * @member {number} owner
     * @memberof ROOM_DATA
     * @instance
     */
    ROOM_DATA.prototype.owner = 0;

    /**
     * ROOM_DATA players.
     * @member {Object.<string,IROOM_PLAYER>} players
     * @memberof ROOM_DATA
     * @instance
     */
    ROOM_DATA.prototype.players = $util.emptyObject;

    /**
     * Creates a new ROOM_DATA instance using the specified properties.
     * @function create
     * @memberof ROOM_DATA
     * @static
     * @param {IROOM_DATA=} [properties] Properties to set
     * @returns {ROOM_DATA} ROOM_DATA instance
     */
    ROOM_DATA.create = function create(properties) {
        return new ROOM_DATA(properties);
    };

    /**
     * Encodes the specified ROOM_DATA message. Does not implicitly {@link ROOM_DATA.verify|verify} messages.
     * @function encode
     * @memberof ROOM_DATA
     * @static
     * @param {IROOM_DATA} m ROOM_DATA message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    ROOM_DATA.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.id != null && Object.hasOwnProperty.call(m, "id"))
            w.uint32(8).int32(m.id);
        if (m.gameName != null && Object.hasOwnProperty.call(m, "gameName"))
            w.uint32(18).string(m.gameName);
        if (m.owner != null && Object.hasOwnProperty.call(m, "owner"))
            w.uint32(24).int32(m.owner);
        if (m.players != null && Object.hasOwnProperty.call(m, "players")) {
            for (var ks = Object.keys(m.players), i = 0; i < ks.length; ++i) {
                w.uint32(34).fork().uint32(8).int32(ks[i]);
                $root.ROOM_PLAYER.encode(m.players[ks[i]], w.uint32(18).fork()).ldelim().ldelim();
            }
        }
        return w;
    };

    /**
     * Decodes a ROOM_DATA message from the specified reader or buffer.
     * @function decode
     * @memberof ROOM_DATA
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {ROOM_DATA} ROOM_DATA
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    ROOM_DATA.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.ROOM_DATA(), k, value;
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.id = r.int32();
                    break;
                }
            case 2: {
                    m.gameName = r.string();
                    break;
                }
            case 3: {
                    m.owner = r.int32();
                    break;
                }
            case 4: {
                    if (m.players === $util.emptyObject)
                        m.players = {};
                    var c2 = r.uint32() + r.pos;
                    k = 0;
                    value = null;
                    while (r.pos < c2) {
                        var tag2 = r.uint32();
                        switch (tag2 >>> 3) {
                        case 1:
                            k = r.int32();
                            break;
                        case 2:
                            value = $root.ROOM_PLAYER.decode(r, r.uint32());
                            break;
                        default:
                            r.skipType(tag2 & 7);
                            break;
                        }
                    }
                    m.players[k] = value;
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for ROOM_DATA
     * @function getTypeUrl
     * @memberof ROOM_DATA
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    ROOM_DATA.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/ROOM_DATA";
    };

    return ROOM_DATA;
})();

$root.CS_ROOM_CREATE = (function() {

    /**
     * Properties of a CS_ROOM_CREATE.
     * @exports ICS_ROOM_CREATE
     * @interface ICS_ROOM_CREATE
     * @property {string|null} [gameName] CS_ROOM_CREATE gameName
     * @property {Object.<string,string>|null} [rule] CS_ROOM_CREATE rule
     */

    /**
     * Constructs a new CS_ROOM_CREATE.
     * @exports CS_ROOM_CREATE
     * @classdesc Represents a CS_ROOM_CREATE.
     * @implements ICS_ROOM_CREATE
     * @constructor
     * @param {ICS_ROOM_CREATE=} [p] Properties to set
     */
    function CS_ROOM_CREATE(p) {
        this.rule = {};
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * CS_ROOM_CREATE gameName.
     * @member {string} gameName
     * @memberof CS_ROOM_CREATE
     * @instance
     */
    CS_ROOM_CREATE.prototype.gameName = "";

    /**
     * CS_ROOM_CREATE rule.
     * @member {Object.<string,string>} rule
     * @memberof CS_ROOM_CREATE
     * @instance
     */
    CS_ROOM_CREATE.prototype.rule = $util.emptyObject;

    /**
     * Creates a new CS_ROOM_CREATE instance using the specified properties.
     * @function create
     * @memberof CS_ROOM_CREATE
     * @static
     * @param {ICS_ROOM_CREATE=} [properties] Properties to set
     * @returns {CS_ROOM_CREATE} CS_ROOM_CREATE instance
     */
    CS_ROOM_CREATE.create = function create(properties) {
        return new CS_ROOM_CREATE(properties);
    };

    /**
     * Encodes the specified CS_ROOM_CREATE message. Does not implicitly {@link CS_ROOM_CREATE.verify|verify} messages.
     * @function encode
     * @memberof CS_ROOM_CREATE
     * @static
     * @param {ICS_ROOM_CREATE} m CS_ROOM_CREATE message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    CS_ROOM_CREATE.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.gameName != null && Object.hasOwnProperty.call(m, "gameName"))
            w.uint32(10).string(m.gameName);
        if (m.rule != null && Object.hasOwnProperty.call(m, "rule")) {
            for (var ks = Object.keys(m.rule), i = 0; i < ks.length; ++i) {
                w.uint32(18).fork().uint32(8).int32(ks[i]).uint32(18).string(m.rule[ks[i]]).ldelim();
            }
        }
        return w;
    };

    /**
     * Decodes a CS_ROOM_CREATE message from the specified reader or buffer.
     * @function decode
     * @memberof CS_ROOM_CREATE
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {CS_ROOM_CREATE} CS_ROOM_CREATE
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    CS_ROOM_CREATE.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.CS_ROOM_CREATE(), k, value;
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.gameName = r.string();
                    break;
                }
            case 2: {
                    if (m.rule === $util.emptyObject)
                        m.rule = {};
                    var c2 = r.uint32() + r.pos;
                    k = 0;
                    value = "";
                    while (r.pos < c2) {
                        var tag2 = r.uint32();
                        switch (tag2 >>> 3) {
                        case 1:
                            k = r.int32();
                            break;
                        case 2:
                            value = r.string();
                            break;
                        default:
                            r.skipType(tag2 & 7);
                            break;
                        }
                    }
                    m.rule[k] = value;
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for CS_ROOM_CREATE
     * @function getTypeUrl
     * @memberof CS_ROOM_CREATE
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    CS_ROOM_CREATE.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/CS_ROOM_CREATE";
    };

    return CS_ROOM_CREATE;
})();

$root.SC_ROOM_CREATE = (function() {

    /**
     * Properties of a SC_ROOM_CREATE.
     * @exports ISC_ROOM_CREATE
     * @interface ISC_ROOM_CREATE
     * @property {number|null} [code] SC_ROOM_CREATE code
     */

    /**
     * Constructs a new SC_ROOM_CREATE.
     * @exports SC_ROOM_CREATE
     * @classdesc Represents a SC_ROOM_CREATE.
     * @implements ISC_ROOM_CREATE
     * @constructor
     * @param {ISC_ROOM_CREATE=} [p] Properties to set
     */
    function SC_ROOM_CREATE(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_ROOM_CREATE code.
     * @member {number} code
     * @memberof SC_ROOM_CREATE
     * @instance
     */
    SC_ROOM_CREATE.prototype.code = 0;

    /**
     * Creates a new SC_ROOM_CREATE instance using the specified properties.
     * @function create
     * @memberof SC_ROOM_CREATE
     * @static
     * @param {ISC_ROOM_CREATE=} [properties] Properties to set
     * @returns {SC_ROOM_CREATE} SC_ROOM_CREATE instance
     */
    SC_ROOM_CREATE.create = function create(properties) {
        return new SC_ROOM_CREATE(properties);
    };

    /**
     * Encodes the specified SC_ROOM_CREATE message. Does not implicitly {@link SC_ROOM_CREATE.verify|verify} messages.
     * @function encode
     * @memberof SC_ROOM_CREATE
     * @static
     * @param {ISC_ROOM_CREATE} m SC_ROOM_CREATE message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_ROOM_CREATE.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.code != null && Object.hasOwnProperty.call(m, "code"))
            w.uint32(8).int32(m.code);
        return w;
    };

    /**
     * Decodes a SC_ROOM_CREATE message from the specified reader or buffer.
     * @function decode
     * @memberof SC_ROOM_CREATE
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_ROOM_CREATE} SC_ROOM_CREATE
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_ROOM_CREATE.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_ROOM_CREATE();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.code = r.int32();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for SC_ROOM_CREATE
     * @function getTypeUrl
     * @memberof SC_ROOM_CREATE
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_ROOM_CREATE.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_ROOM_CREATE";
    };

    return SC_ROOM_CREATE;
})();

$root.CS_ROOM_ENTER = (function() {

    /**
     * Properties of a CS_ROOM_ENTER.
     * @exports ICS_ROOM_ENTER
     * @interface ICS_ROOM_ENTER
     * @property {number|null} [roomId] CS_ROOM_ENTER roomId
     */

    /**
     * Constructs a new CS_ROOM_ENTER.
     * @exports CS_ROOM_ENTER
     * @classdesc Represents a CS_ROOM_ENTER.
     * @implements ICS_ROOM_ENTER
     * @constructor
     * @param {ICS_ROOM_ENTER=} [p] Properties to set
     */
    function CS_ROOM_ENTER(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * CS_ROOM_ENTER roomId.
     * @member {number} roomId
     * @memberof CS_ROOM_ENTER
     * @instance
     */
    CS_ROOM_ENTER.prototype.roomId = 0;

    /**
     * Creates a new CS_ROOM_ENTER instance using the specified properties.
     * @function create
     * @memberof CS_ROOM_ENTER
     * @static
     * @param {ICS_ROOM_ENTER=} [properties] Properties to set
     * @returns {CS_ROOM_ENTER} CS_ROOM_ENTER instance
     */
    CS_ROOM_ENTER.create = function create(properties) {
        return new CS_ROOM_ENTER(properties);
    };

    /**
     * Encodes the specified CS_ROOM_ENTER message. Does not implicitly {@link CS_ROOM_ENTER.verify|verify} messages.
     * @function encode
     * @memberof CS_ROOM_ENTER
     * @static
     * @param {ICS_ROOM_ENTER} m CS_ROOM_ENTER message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    CS_ROOM_ENTER.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.roomId != null && Object.hasOwnProperty.call(m, "roomId"))
            w.uint32(8).int32(m.roomId);
        return w;
    };

    /**
     * Decodes a CS_ROOM_ENTER message from the specified reader or buffer.
     * @function decode
     * @memberof CS_ROOM_ENTER
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {CS_ROOM_ENTER} CS_ROOM_ENTER
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    CS_ROOM_ENTER.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.CS_ROOM_ENTER();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.roomId = r.int32();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for CS_ROOM_ENTER
     * @function getTypeUrl
     * @memberof CS_ROOM_ENTER
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    CS_ROOM_ENTER.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/CS_ROOM_ENTER";
    };

    return CS_ROOM_ENTER;
})();

$root.SC_ROOM_ENTER = (function() {

    /**
     * Properties of a SC_ROOM_ENTER.
     * @exports ISC_ROOM_ENTER
     * @interface ISC_ROOM_ENTER
     * @property {number|null} [code] SC_ROOM_ENTER code
     * @property {string|null} [gameName] SC_ROOM_ENTER gameName
     */

    /**
     * Constructs a new SC_ROOM_ENTER.
     * @exports SC_ROOM_ENTER
     * @classdesc Represents a SC_ROOM_ENTER.
     * @implements ISC_ROOM_ENTER
     * @constructor
     * @param {ISC_ROOM_ENTER=} [p] Properties to set
     */
    function SC_ROOM_ENTER(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_ROOM_ENTER code.
     * @member {number} code
     * @memberof SC_ROOM_ENTER
     * @instance
     */
    SC_ROOM_ENTER.prototype.code = 0;

    /**
     * SC_ROOM_ENTER gameName.
     * @member {string} gameName
     * @memberof SC_ROOM_ENTER
     * @instance
     */
    SC_ROOM_ENTER.prototype.gameName = "";

    /**
     * Creates a new SC_ROOM_ENTER instance using the specified properties.
     * @function create
     * @memberof SC_ROOM_ENTER
     * @static
     * @param {ISC_ROOM_ENTER=} [properties] Properties to set
     * @returns {SC_ROOM_ENTER} SC_ROOM_ENTER instance
     */
    SC_ROOM_ENTER.create = function create(properties) {
        return new SC_ROOM_ENTER(properties);
    };

    /**
     * Encodes the specified SC_ROOM_ENTER message. Does not implicitly {@link SC_ROOM_ENTER.verify|verify} messages.
     * @function encode
     * @memberof SC_ROOM_ENTER
     * @static
     * @param {ISC_ROOM_ENTER} m SC_ROOM_ENTER message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_ROOM_ENTER.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.code != null && Object.hasOwnProperty.call(m, "code"))
            w.uint32(8).int32(m.code);
        if (m.gameName != null && Object.hasOwnProperty.call(m, "gameName"))
            w.uint32(18).string(m.gameName);
        return w;
    };

    /**
     * Decodes a SC_ROOM_ENTER message from the specified reader or buffer.
     * @function decode
     * @memberof SC_ROOM_ENTER
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_ROOM_ENTER} SC_ROOM_ENTER
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_ROOM_ENTER.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_ROOM_ENTER();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.code = r.int32();
                    break;
                }
            case 2: {
                    m.gameName = r.string();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for SC_ROOM_ENTER
     * @function getTypeUrl
     * @memberof SC_ROOM_ENTER
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_ROOM_ENTER.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_ROOM_ENTER";
    };

    return SC_ROOM_ENTER;
})();

$root.SC_PLAYER_ENTER = (function() {

    /**
     * Properties of a SC_PLAYER_ENTER.
     * @exports ISC_PLAYER_ENTER
     * @interface ISC_PLAYER_ENTER
     * @property {number|null} [seat] SC_PLAYER_ENTER seat
     * @property {IPLAYER_DATA|null} [playerInfo] SC_PLAYER_ENTER playerInfo
     */

    /**
     * Constructs a new SC_PLAYER_ENTER.
     * @exports SC_PLAYER_ENTER
     * @classdesc Represents a SC_PLAYER_ENTER.
     * @implements ISC_PLAYER_ENTER
     * @constructor
     * @param {ISC_PLAYER_ENTER=} [p] Properties to set
     */
    function SC_PLAYER_ENTER(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_PLAYER_ENTER seat.
     * @member {number} seat
     * @memberof SC_PLAYER_ENTER
     * @instance
     */
    SC_PLAYER_ENTER.prototype.seat = 0;

    /**
     * SC_PLAYER_ENTER playerInfo.
     * @member {IPLAYER_DATA|null|undefined} playerInfo
     * @memberof SC_PLAYER_ENTER
     * @instance
     */
    SC_PLAYER_ENTER.prototype.playerInfo = null;

    /**
     * Creates a new SC_PLAYER_ENTER instance using the specified properties.
     * @function create
     * @memberof SC_PLAYER_ENTER
     * @static
     * @param {ISC_PLAYER_ENTER=} [properties] Properties to set
     * @returns {SC_PLAYER_ENTER} SC_PLAYER_ENTER instance
     */
    SC_PLAYER_ENTER.create = function create(properties) {
        return new SC_PLAYER_ENTER(properties);
    };

    /**
     * Encodes the specified SC_PLAYER_ENTER message. Does not implicitly {@link SC_PLAYER_ENTER.verify|verify} messages.
     * @function encode
     * @memberof SC_PLAYER_ENTER
     * @static
     * @param {ISC_PLAYER_ENTER} m SC_PLAYER_ENTER message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_PLAYER_ENTER.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.seat != null && Object.hasOwnProperty.call(m, "seat"))
            w.uint32(8).int32(m.seat);
        if (m.playerInfo != null && Object.hasOwnProperty.call(m, "playerInfo"))
            $root.PLAYER_DATA.encode(m.playerInfo, w.uint32(18).fork()).ldelim();
        return w;
    };

    /**
     * Decodes a SC_PLAYER_ENTER message from the specified reader or buffer.
     * @function decode
     * @memberof SC_PLAYER_ENTER
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_PLAYER_ENTER} SC_PLAYER_ENTER
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_PLAYER_ENTER.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_PLAYER_ENTER();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.seat = r.int32();
                    break;
                }
            case 2: {
                    m.playerInfo = $root.PLAYER_DATA.decode(r, r.uint32());
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for SC_PLAYER_ENTER
     * @function getTypeUrl
     * @memberof SC_PLAYER_ENTER
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_PLAYER_ENTER.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_PLAYER_ENTER";
    };

    return SC_PLAYER_ENTER;
})();

$root.SC_PLAYER_EXIT = (function() {

    /**
     * Properties of a SC_PLAYER_EXIT.
     * @exports ISC_PLAYER_EXIT
     * @interface ISC_PLAYER_EXIT
     * @property {number|null} [seat] SC_PLAYER_EXIT seat
     */

    /**
     * Constructs a new SC_PLAYER_EXIT.
     * @exports SC_PLAYER_EXIT
     * @classdesc Represents a SC_PLAYER_EXIT.
     * @implements ISC_PLAYER_EXIT
     * @constructor
     * @param {ISC_PLAYER_EXIT=} [p] Properties to set
     */
    function SC_PLAYER_EXIT(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_PLAYER_EXIT seat.
     * @member {number} seat
     * @memberof SC_PLAYER_EXIT
     * @instance
     */
    SC_PLAYER_EXIT.prototype.seat = 0;

    /**
     * Creates a new SC_PLAYER_EXIT instance using the specified properties.
     * @function create
     * @memberof SC_PLAYER_EXIT
     * @static
     * @param {ISC_PLAYER_EXIT=} [properties] Properties to set
     * @returns {SC_PLAYER_EXIT} SC_PLAYER_EXIT instance
     */
    SC_PLAYER_EXIT.create = function create(properties) {
        return new SC_PLAYER_EXIT(properties);
    };

    /**
     * Encodes the specified SC_PLAYER_EXIT message. Does not implicitly {@link SC_PLAYER_EXIT.verify|verify} messages.
     * @function encode
     * @memberof SC_PLAYER_EXIT
     * @static
     * @param {ISC_PLAYER_EXIT} m SC_PLAYER_EXIT message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_PLAYER_EXIT.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.seat != null && Object.hasOwnProperty.call(m, "seat"))
            w.uint32(8).int32(m.seat);
        return w;
    };

    /**
     * Decodes a SC_PLAYER_EXIT message from the specified reader or buffer.
     * @function decode
     * @memberof SC_PLAYER_EXIT
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_PLAYER_EXIT} SC_PLAYER_EXIT
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_PLAYER_EXIT.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_PLAYER_EXIT();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.seat = r.int32();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for SC_PLAYER_EXIT
     * @function getTypeUrl
     * @memberof SC_PLAYER_EXIT
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_PLAYER_EXIT.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_PLAYER_EXIT";
    };

    return SC_PLAYER_EXIT;
})();

$root.SC_DISMISS = (function() {

    /**
     * Properties of a SC_DISMISS.
     * @exports ISC_DISMISS
     * @interface ISC_DISMISS
     * @property {number|null} [code] SC_DISMISS code
     */

    /**
     * Constructs a new SC_DISMISS.
     * @exports SC_DISMISS
     * @classdesc Represents a SC_DISMISS.
     * @implements ISC_DISMISS
     * @constructor
     * @param {ISC_DISMISS=} [p] Properties to set
     */
    function SC_DISMISS(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_DISMISS code.
     * @member {number} code
     * @memberof SC_DISMISS
     * @instance
     */
    SC_DISMISS.prototype.code = 0;

    /**
     * Creates a new SC_DISMISS instance using the specified properties.
     * @function create
     * @memberof SC_DISMISS
     * @static
     * @param {ISC_DISMISS=} [properties] Properties to set
     * @returns {SC_DISMISS} SC_DISMISS instance
     */
    SC_DISMISS.create = function create(properties) {
        return new SC_DISMISS(properties);
    };

    /**
     * Encodes the specified SC_DISMISS message. Does not implicitly {@link SC_DISMISS.verify|verify} messages.
     * @function encode
     * @memberof SC_DISMISS
     * @static
     * @param {ISC_DISMISS} m SC_DISMISS message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_DISMISS.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.code != null && Object.hasOwnProperty.call(m, "code"))
            w.uint32(8).int32(m.code);
        return w;
    };

    /**
     * Decodes a SC_DISMISS message from the specified reader or buffer.
     * @function decode
     * @memberof SC_DISMISS
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_DISMISS} SC_DISMISS
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_DISMISS.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_DISMISS();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.code = r.int32();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for SC_DISMISS
     * @function getTypeUrl
     * @memberof SC_DISMISS
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_DISMISS.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_DISMISS";
    };

    return SC_DISMISS;
})();

$root.WZQ_PLAYER = (function() {

    /**
     * Properties of a WZQ_PLAYER.
     * @exports IWZQ_PLAYER
     * @interface IWZQ_PLAYER
     * @property {IROOM_PLAYER|null} [roomPlayer] WZQ_PLAYER roomPlayer
     * @property {boolean|null} [ready] WZQ_PLAYER ready
     */

    /**
     * Constructs a new WZQ_PLAYER.
     * @exports WZQ_PLAYER
     * @classdesc Represents a WZQ_PLAYER.
     * @implements IWZQ_PLAYER
     * @constructor
     * @param {IWZQ_PLAYER=} [p] Properties to set
     */
    function WZQ_PLAYER(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * WZQ_PLAYER roomPlayer.
     * @member {IROOM_PLAYER|null|undefined} roomPlayer
     * @memberof WZQ_PLAYER
     * @instance
     */
    WZQ_PLAYER.prototype.roomPlayer = null;

    /**
     * WZQ_PLAYER ready.
     * @member {boolean} ready
     * @memberof WZQ_PLAYER
     * @instance
     */
    WZQ_PLAYER.prototype.ready = false;

    /**
     * Creates a new WZQ_PLAYER instance using the specified properties.
     * @function create
     * @memberof WZQ_PLAYER
     * @static
     * @param {IWZQ_PLAYER=} [properties] Properties to set
     * @returns {WZQ_PLAYER} WZQ_PLAYER instance
     */
    WZQ_PLAYER.create = function create(properties) {
        return new WZQ_PLAYER(properties);
    };

    /**
     * Encodes the specified WZQ_PLAYER message. Does not implicitly {@link WZQ_PLAYER.verify|verify} messages.
     * @function encode
     * @memberof WZQ_PLAYER
     * @static
     * @param {IWZQ_PLAYER} m WZQ_PLAYER message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    WZQ_PLAYER.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.roomPlayer != null && Object.hasOwnProperty.call(m, "roomPlayer"))
            $root.ROOM_PLAYER.encode(m.roomPlayer, w.uint32(10).fork()).ldelim();
        if (m.ready != null && Object.hasOwnProperty.call(m, "ready"))
            w.uint32(16).bool(m.ready);
        return w;
    };

    /**
     * Decodes a WZQ_PLAYER message from the specified reader or buffer.
     * @function decode
     * @memberof WZQ_PLAYER
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {WZQ_PLAYER} WZQ_PLAYER
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    WZQ_PLAYER.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.WZQ_PLAYER();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.roomPlayer = $root.ROOM_PLAYER.decode(r, r.uint32());
                    break;
                }
            case 2: {
                    m.ready = r.bool();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for WZQ_PLAYER
     * @function getTypeUrl
     * @memberof WZQ_PLAYER
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    WZQ_PLAYER.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/WZQ_PLAYER";
    };

    return WZQ_PLAYER;
})();

$root.WZQ_MAP_ITEM = (function() {

    /**
     * Properties of a WZQ_MAP_ITEM.
     * @exports IWZQ_MAP_ITEM
     * @interface IWZQ_MAP_ITEM
     * @property {number|null} [x] WZQ_MAP_ITEM x
     * @property {number|null} [y] WZQ_MAP_ITEM y
     */

    /**
     * Constructs a new WZQ_MAP_ITEM.
     * @exports WZQ_MAP_ITEM
     * @classdesc Represents a WZQ_MAP_ITEM.
     * @implements IWZQ_MAP_ITEM
     * @constructor
     * @param {IWZQ_MAP_ITEM=} [p] Properties to set
     */
    function WZQ_MAP_ITEM(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * WZQ_MAP_ITEM x.
     * @member {number} x
     * @memberof WZQ_MAP_ITEM
     * @instance
     */
    WZQ_MAP_ITEM.prototype.x = 0;

    /**
     * WZQ_MAP_ITEM y.
     * @member {number} y
     * @memberof WZQ_MAP_ITEM
     * @instance
     */
    WZQ_MAP_ITEM.prototype.y = 0;

    /**
     * Creates a new WZQ_MAP_ITEM instance using the specified properties.
     * @function create
     * @memberof WZQ_MAP_ITEM
     * @static
     * @param {IWZQ_MAP_ITEM=} [properties] Properties to set
     * @returns {WZQ_MAP_ITEM} WZQ_MAP_ITEM instance
     */
    WZQ_MAP_ITEM.create = function create(properties) {
        return new WZQ_MAP_ITEM(properties);
    };

    /**
     * Encodes the specified WZQ_MAP_ITEM message. Does not implicitly {@link WZQ_MAP_ITEM.verify|verify} messages.
     * @function encode
     * @memberof WZQ_MAP_ITEM
     * @static
     * @param {IWZQ_MAP_ITEM} m WZQ_MAP_ITEM message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    WZQ_MAP_ITEM.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.x != null && Object.hasOwnProperty.call(m, "x"))
            w.uint32(8).int32(m.x);
        if (m.y != null && Object.hasOwnProperty.call(m, "y"))
            w.uint32(16).int32(m.y);
        return w;
    };

    /**
     * Decodes a WZQ_MAP_ITEM message from the specified reader or buffer.
     * @function decode
     * @memberof WZQ_MAP_ITEM
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {WZQ_MAP_ITEM} WZQ_MAP_ITEM
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    WZQ_MAP_ITEM.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.WZQ_MAP_ITEM();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.x = r.int32();
                    break;
                }
            case 2: {
                    m.y = r.int32();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for WZQ_MAP_ITEM
     * @function getTypeUrl
     * @memberof WZQ_MAP_ITEM
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    WZQ_MAP_ITEM.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/WZQ_MAP_ITEM";
    };

    return WZQ_MAP_ITEM;
})();

$root.WZQ_MAP_ROW = (function() {

    /**
     * Properties of a WZQ_MAP_ROW.
     * @exports IWZQ_MAP_ROW
     * @interface IWZQ_MAP_ROW
     * @property {Object.<string,number>|null} [map] WZQ_MAP_ROW map
     */

    /**
     * Constructs a new WZQ_MAP_ROW.
     * @exports WZQ_MAP_ROW
     * @classdesc Represents a WZQ_MAP_ROW.
     * @implements IWZQ_MAP_ROW
     * @constructor
     * @param {IWZQ_MAP_ROW=} [p] Properties to set
     */
    function WZQ_MAP_ROW(p) {
        this.map = {};
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * WZQ_MAP_ROW map.
     * @member {Object.<string,number>} map
     * @memberof WZQ_MAP_ROW
     * @instance
     */
    WZQ_MAP_ROW.prototype.map = $util.emptyObject;

    /**
     * Creates a new WZQ_MAP_ROW instance using the specified properties.
     * @function create
     * @memberof WZQ_MAP_ROW
     * @static
     * @param {IWZQ_MAP_ROW=} [properties] Properties to set
     * @returns {WZQ_MAP_ROW} WZQ_MAP_ROW instance
     */
    WZQ_MAP_ROW.create = function create(properties) {
        return new WZQ_MAP_ROW(properties);
    };

    /**
     * Encodes the specified WZQ_MAP_ROW message. Does not implicitly {@link WZQ_MAP_ROW.verify|verify} messages.
     * @function encode
     * @memberof WZQ_MAP_ROW
     * @static
     * @param {IWZQ_MAP_ROW} m WZQ_MAP_ROW message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    WZQ_MAP_ROW.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.map != null && Object.hasOwnProperty.call(m, "map")) {
            for (var ks = Object.keys(m.map), i = 0; i < ks.length; ++i) {
                w.uint32(10).fork().uint32(8).int32(ks[i]).uint32(16).int32(m.map[ks[i]]).ldelim();
            }
        }
        return w;
    };

    /**
     * Decodes a WZQ_MAP_ROW message from the specified reader or buffer.
     * @function decode
     * @memberof WZQ_MAP_ROW
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {WZQ_MAP_ROW} WZQ_MAP_ROW
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    WZQ_MAP_ROW.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.WZQ_MAP_ROW(), k, value;
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    if (m.map === $util.emptyObject)
                        m.map = {};
                    var c2 = r.uint32() + r.pos;
                    k = 0;
                    value = 0;
                    while (r.pos < c2) {
                        var tag2 = r.uint32();
                        switch (tag2 >>> 3) {
                        case 1:
                            k = r.int32();
                            break;
                        case 2:
                            value = r.int32();
                            break;
                        default:
                            r.skipType(tag2 & 7);
                            break;
                        }
                    }
                    m.map[k] = value;
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for WZQ_MAP_ROW
     * @function getTypeUrl
     * @memberof WZQ_MAP_ROW
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    WZQ_MAP_ROW.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/WZQ_MAP_ROW";
    };

    return WZQ_MAP_ROW;
})();

$root.SC_WZQ_PLAYER_ENTER = (function() {

    /**
     * Properties of a SC_WZQ_PLAYER_ENTER.
     * @exports ISC_WZQ_PLAYER_ENTER
     * @interface ISC_WZQ_PLAYER_ENTER
     * @property {number|null} [seat] SC_WZQ_PLAYER_ENTER seat
     * @property {IWZQ_PLAYER} player SC_WZQ_PLAYER_ENTER player
     */

    /**
     * Constructs a new SC_WZQ_PLAYER_ENTER.
     * @exports SC_WZQ_PLAYER_ENTER
     * @classdesc Represents a SC_WZQ_PLAYER_ENTER.
     * @implements ISC_WZQ_PLAYER_ENTER
     * @constructor
     * @param {ISC_WZQ_PLAYER_ENTER=} [p] Properties to set
     */
    function SC_WZQ_PLAYER_ENTER(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_WZQ_PLAYER_ENTER seat.
     * @member {number} seat
     * @memberof SC_WZQ_PLAYER_ENTER
     * @instance
     */
    SC_WZQ_PLAYER_ENTER.prototype.seat = 0;

    /**
     * SC_WZQ_PLAYER_ENTER player.
     * @member {IWZQ_PLAYER} player
     * @memberof SC_WZQ_PLAYER_ENTER
     * @instance
     */
    SC_WZQ_PLAYER_ENTER.prototype.player = null;

    /**
     * Creates a new SC_WZQ_PLAYER_ENTER instance using the specified properties.
     * @function create
     * @memberof SC_WZQ_PLAYER_ENTER
     * @static
     * @param {ISC_WZQ_PLAYER_ENTER=} [properties] Properties to set
     * @returns {SC_WZQ_PLAYER_ENTER} SC_WZQ_PLAYER_ENTER instance
     */
    SC_WZQ_PLAYER_ENTER.create = function create(properties) {
        return new SC_WZQ_PLAYER_ENTER(properties);
    };

    /**
     * Encodes the specified SC_WZQ_PLAYER_ENTER message. Does not implicitly {@link SC_WZQ_PLAYER_ENTER.verify|verify} messages.
     * @function encode
     * @memberof SC_WZQ_PLAYER_ENTER
     * @static
     * @param {ISC_WZQ_PLAYER_ENTER} m SC_WZQ_PLAYER_ENTER message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_WZQ_PLAYER_ENTER.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.seat != null && Object.hasOwnProperty.call(m, "seat"))
            w.uint32(8).int32(m.seat);
        $root.WZQ_PLAYER.encode(m.player, w.uint32(18).fork()).ldelim();
        return w;
    };

    /**
     * Decodes a SC_WZQ_PLAYER_ENTER message from the specified reader or buffer.
     * @function decode
     * @memberof SC_WZQ_PLAYER_ENTER
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_WZQ_PLAYER_ENTER} SC_WZQ_PLAYER_ENTER
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_WZQ_PLAYER_ENTER.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_WZQ_PLAYER_ENTER();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.seat = r.int32();
                    break;
                }
            case 2: {
                    m.player = $root.WZQ_PLAYER.decode(r, r.uint32());
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        if (!m.hasOwnProperty("player"))
            throw $util.ProtocolError("missing required 'player'", { instance: m });
        return m;
    };

    /**
     * Gets the default type url for SC_WZQ_PLAYER_ENTER
     * @function getTypeUrl
     * @memberof SC_WZQ_PLAYER_ENTER
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_WZQ_PLAYER_ENTER.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_WZQ_PLAYER_ENTER";
    };

    return SC_WZQ_PLAYER_ENTER;
})();

$root.SC_WZQ_PLAYER_EXIT = (function() {

    /**
     * Properties of a SC_WZQ_PLAYER_EXIT.
     * @exports ISC_WZQ_PLAYER_EXIT
     * @interface ISC_WZQ_PLAYER_EXIT
     * @property {number|null} [seat] SC_WZQ_PLAYER_EXIT seat
     */

    /**
     * Constructs a new SC_WZQ_PLAYER_EXIT.
     * @exports SC_WZQ_PLAYER_EXIT
     * @classdesc Represents a SC_WZQ_PLAYER_EXIT.
     * @implements ISC_WZQ_PLAYER_EXIT
     * @constructor
     * @param {ISC_WZQ_PLAYER_EXIT=} [p] Properties to set
     */
    function SC_WZQ_PLAYER_EXIT(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_WZQ_PLAYER_EXIT seat.
     * @member {number} seat
     * @memberof SC_WZQ_PLAYER_EXIT
     * @instance
     */
    SC_WZQ_PLAYER_EXIT.prototype.seat = 0;

    /**
     * Creates a new SC_WZQ_PLAYER_EXIT instance using the specified properties.
     * @function create
     * @memberof SC_WZQ_PLAYER_EXIT
     * @static
     * @param {ISC_WZQ_PLAYER_EXIT=} [properties] Properties to set
     * @returns {SC_WZQ_PLAYER_EXIT} SC_WZQ_PLAYER_EXIT instance
     */
    SC_WZQ_PLAYER_EXIT.create = function create(properties) {
        return new SC_WZQ_PLAYER_EXIT(properties);
    };

    /**
     * Encodes the specified SC_WZQ_PLAYER_EXIT message. Does not implicitly {@link SC_WZQ_PLAYER_EXIT.verify|verify} messages.
     * @function encode
     * @memberof SC_WZQ_PLAYER_EXIT
     * @static
     * @param {ISC_WZQ_PLAYER_EXIT} m SC_WZQ_PLAYER_EXIT message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_WZQ_PLAYER_EXIT.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.seat != null && Object.hasOwnProperty.call(m, "seat"))
            w.uint32(8).int32(m.seat);
        return w;
    };

    /**
     * Decodes a SC_WZQ_PLAYER_EXIT message from the specified reader or buffer.
     * @function decode
     * @memberof SC_WZQ_PLAYER_EXIT
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_WZQ_PLAYER_EXIT} SC_WZQ_PLAYER_EXIT
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_WZQ_PLAYER_EXIT.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_WZQ_PLAYER_EXIT();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.seat = r.int32();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for SC_WZQ_PLAYER_EXIT
     * @function getTypeUrl
     * @memberof SC_WZQ_PLAYER_EXIT
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_WZQ_PLAYER_EXIT.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_WZQ_PLAYER_EXIT";
    };

    return SC_WZQ_PLAYER_EXIT;
})();

$root.SC_WZQ_QUERY = (function() {

    /**
     * Properties of a SC_WZQ_QUERY.
     * @exports ISC_WZQ_QUERY
     * @interface ISC_WZQ_QUERY
     * @property {number|null} [roomId] SC_WZQ_QUERY roomId
     * @property {Object.<string,IWZQ_PLAYER>|null} [players] SC_WZQ_QUERY players
     * @property {number|null} [gameStatus] SC_WZQ_QUERY gameStatus
     * @property {number|null} [seat] SC_WZQ_QUERY seat
     * @property {Array.<string>|null} [readySeats] SC_WZQ_QUERY readySeats
     * @property {number|null} [curOpSeat] SC_WZQ_QUERY curOpSeat
     * @property {Object.<string,IWZQ_MAP_ROW>|null} [map] SC_WZQ_QUERY map
     * @property {number|null} [winner] SC_WZQ_QUERY winner
     */

    /**
     * Constructs a new SC_WZQ_QUERY.
     * @exports SC_WZQ_QUERY
     * @classdesc Represents a SC_WZQ_QUERY.
     * @implements ISC_WZQ_QUERY
     * @constructor
     * @param {ISC_WZQ_QUERY=} [p] Properties to set
     */
    function SC_WZQ_QUERY(p) {
        this.players = {};
        this.readySeats = [];
        this.map = {};
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_WZQ_QUERY roomId.
     * @member {number} roomId
     * @memberof SC_WZQ_QUERY
     * @instance
     */
    SC_WZQ_QUERY.prototype.roomId = 0;

    /**
     * SC_WZQ_QUERY players.
     * @member {Object.<string,IWZQ_PLAYER>} players
     * @memberof SC_WZQ_QUERY
     * @instance
     */
    SC_WZQ_QUERY.prototype.players = $util.emptyObject;

    /**
     * SC_WZQ_QUERY gameStatus.
     * @member {number} gameStatus
     * @memberof SC_WZQ_QUERY
     * @instance
     */
    SC_WZQ_QUERY.prototype.gameStatus = 0;

    /**
     * SC_WZQ_QUERY seat.
     * @member {number} seat
     * @memberof SC_WZQ_QUERY
     * @instance
     */
    SC_WZQ_QUERY.prototype.seat = 0;

    /**
     * SC_WZQ_QUERY readySeats.
     * @member {Array.<string>} readySeats
     * @memberof SC_WZQ_QUERY
     * @instance
     */
    SC_WZQ_QUERY.prototype.readySeats = $util.emptyArray;

    /**
     * SC_WZQ_QUERY curOpSeat.
     * @member {number|null|undefined} curOpSeat
     * @memberof SC_WZQ_QUERY
     * @instance
     */
    SC_WZQ_QUERY.prototype.curOpSeat = null;

    /**
     * SC_WZQ_QUERY map.
     * @member {Object.<string,IWZQ_MAP_ROW>} map
     * @memberof SC_WZQ_QUERY
     * @instance
     */
    SC_WZQ_QUERY.prototype.map = $util.emptyObject;

    /**
     * SC_WZQ_QUERY winner.
     * @member {number|null|undefined} winner
     * @memberof SC_WZQ_QUERY
     * @instance
     */
    SC_WZQ_QUERY.prototype.winner = null;

    // OneOf field names bound to virtual getters and setters
    var $oneOfFields;

    // Virtual OneOf for proto3 optional field
    Object.defineProperty(SC_WZQ_QUERY.prototype, "_curOpSeat", {
        get: $util.oneOfGetter($oneOfFields = ["curOpSeat"]),
        set: $util.oneOfSetter($oneOfFields)
    });

    // Virtual OneOf for proto3 optional field
    Object.defineProperty(SC_WZQ_QUERY.prototype, "_winner", {
        get: $util.oneOfGetter($oneOfFields = ["winner"]),
        set: $util.oneOfSetter($oneOfFields)
    });

    /**
     * Creates a new SC_WZQ_QUERY instance using the specified properties.
     * @function create
     * @memberof SC_WZQ_QUERY
     * @static
     * @param {ISC_WZQ_QUERY=} [properties] Properties to set
     * @returns {SC_WZQ_QUERY} SC_WZQ_QUERY instance
     */
    SC_WZQ_QUERY.create = function create(properties) {
        return new SC_WZQ_QUERY(properties);
    };

    /**
     * Encodes the specified SC_WZQ_QUERY message. Does not implicitly {@link SC_WZQ_QUERY.verify|verify} messages.
     * @function encode
     * @memberof SC_WZQ_QUERY
     * @static
     * @param {ISC_WZQ_QUERY} m SC_WZQ_QUERY message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_WZQ_QUERY.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.roomId != null && Object.hasOwnProperty.call(m, "roomId"))
            w.uint32(8).int32(m.roomId);
        if (m.players != null && Object.hasOwnProperty.call(m, "players")) {
            for (var ks = Object.keys(m.players), i = 0; i < ks.length; ++i) {
                w.uint32(18).fork().uint32(8).int32(ks[i]);
                $root.WZQ_PLAYER.encode(m.players[ks[i]], w.uint32(18).fork()).ldelim().ldelim();
            }
        }
        if (m.gameStatus != null && Object.hasOwnProperty.call(m, "gameStatus"))
            w.uint32(24).int32(m.gameStatus);
        if (m.seat != null && Object.hasOwnProperty.call(m, "seat"))
            w.uint32(32).int32(m.seat);
        if (m.readySeats != null && m.readySeats.length) {
            for (var i = 0; i < m.readySeats.length; ++i)
                w.uint32(42).string(m.readySeats[i]);
        }
        if (m.curOpSeat != null && Object.hasOwnProperty.call(m, "curOpSeat"))
            w.uint32(48).int32(m.curOpSeat);
        if (m.map != null && Object.hasOwnProperty.call(m, "map")) {
            for (var ks = Object.keys(m.map), i = 0; i < ks.length; ++i) {
                w.uint32(58).fork().uint32(8).int32(ks[i]);
                $root.WZQ_MAP_ROW.encode(m.map[ks[i]], w.uint32(18).fork()).ldelim().ldelim();
            }
        }
        if (m.winner != null && Object.hasOwnProperty.call(m, "winner"))
            w.uint32(64).int32(m.winner);
        return w;
    };

    /**
     * Decodes a SC_WZQ_QUERY message from the specified reader or buffer.
     * @function decode
     * @memberof SC_WZQ_QUERY
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_WZQ_QUERY} SC_WZQ_QUERY
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_WZQ_QUERY.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_WZQ_QUERY(), k, value;
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.roomId = r.int32();
                    break;
                }
            case 2: {
                    if (m.players === $util.emptyObject)
                        m.players = {};
                    var c2 = r.uint32() + r.pos;
                    k = 0;
                    value = null;
                    while (r.pos < c2) {
                        var tag2 = r.uint32();
                        switch (tag2 >>> 3) {
                        case 1:
                            k = r.int32();
                            break;
                        case 2:
                            value = $root.WZQ_PLAYER.decode(r, r.uint32());
                            break;
                        default:
                            r.skipType(tag2 & 7);
                            break;
                        }
                    }
                    m.players[k] = value;
                    break;
                }
            case 3: {
                    m.gameStatus = r.int32();
                    break;
                }
            case 4: {
                    m.seat = r.int32();
                    break;
                }
            case 5: {
                    if (!(m.readySeats && m.readySeats.length))
                        m.readySeats = [];
                    m.readySeats.push(r.string());
                    break;
                }
            case 6: {
                    m.curOpSeat = r.int32();
                    break;
                }
            case 7: {
                    if (m.map === $util.emptyObject)
                        m.map = {};
                    var c2 = r.uint32() + r.pos;
                    k = 0;
                    value = null;
                    while (r.pos < c2) {
                        var tag2 = r.uint32();
                        switch (tag2 >>> 3) {
                        case 1:
                            k = r.int32();
                            break;
                        case 2:
                            value = $root.WZQ_MAP_ROW.decode(r, r.uint32());
                            break;
                        default:
                            r.skipType(tag2 & 7);
                            break;
                        }
                    }
                    m.map[k] = value;
                    break;
                }
            case 8: {
                    m.winner = r.int32();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for SC_WZQ_QUERY
     * @function getTypeUrl
     * @memberof SC_WZQ_QUERY
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_WZQ_QUERY.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_WZQ_QUERY";
    };

    return SC_WZQ_QUERY;
})();

$root.SC_WZQ_READY = (function() {

    /**
     * Properties of a SC_WZQ_READY.
     * @exports ISC_WZQ_READY
     * @interface ISC_WZQ_READY
     * @property {number|null} [seat] SC_WZQ_READY seat
     */

    /**
     * Constructs a new SC_WZQ_READY.
     * @exports SC_WZQ_READY
     * @classdesc Represents a SC_WZQ_READY.
     * @implements ISC_WZQ_READY
     * @constructor
     * @param {ISC_WZQ_READY=} [p] Properties to set
     */
    function SC_WZQ_READY(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_WZQ_READY seat.
     * @member {number} seat
     * @memberof SC_WZQ_READY
     * @instance
     */
    SC_WZQ_READY.prototype.seat = 0;

    /**
     * Creates a new SC_WZQ_READY instance using the specified properties.
     * @function create
     * @memberof SC_WZQ_READY
     * @static
     * @param {ISC_WZQ_READY=} [properties] Properties to set
     * @returns {SC_WZQ_READY} SC_WZQ_READY instance
     */
    SC_WZQ_READY.create = function create(properties) {
        return new SC_WZQ_READY(properties);
    };

    /**
     * Encodes the specified SC_WZQ_READY message. Does not implicitly {@link SC_WZQ_READY.verify|verify} messages.
     * @function encode
     * @memberof SC_WZQ_READY
     * @static
     * @param {ISC_WZQ_READY} m SC_WZQ_READY message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_WZQ_READY.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.seat != null && Object.hasOwnProperty.call(m, "seat"))
            w.uint32(8).int32(m.seat);
        return w;
    };

    /**
     * Decodes a SC_WZQ_READY message from the specified reader or buffer.
     * @function decode
     * @memberof SC_WZQ_READY
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_WZQ_READY} SC_WZQ_READY
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_WZQ_READY.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_WZQ_READY();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.seat = r.int32();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for SC_WZQ_READY
     * @function getTypeUrl
     * @memberof SC_WZQ_READY
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_WZQ_READY.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_WZQ_READY";
    };

    return SC_WZQ_READY;
})();

$root.SC_WZQ_UNREADY = (function() {

    /**
     * Properties of a SC_WZQ_UNREADY.
     * @exports ISC_WZQ_UNREADY
     * @interface ISC_WZQ_UNREADY
     * @property {number|null} [seat] SC_WZQ_UNREADY seat
     */

    /**
     * Constructs a new SC_WZQ_UNREADY.
     * @exports SC_WZQ_UNREADY
     * @classdesc Represents a SC_WZQ_UNREADY.
     * @implements ISC_WZQ_UNREADY
     * @constructor
     * @param {ISC_WZQ_UNREADY=} [p] Properties to set
     */
    function SC_WZQ_UNREADY(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_WZQ_UNREADY seat.
     * @member {number} seat
     * @memberof SC_WZQ_UNREADY
     * @instance
     */
    SC_WZQ_UNREADY.prototype.seat = 0;

    /**
     * Creates a new SC_WZQ_UNREADY instance using the specified properties.
     * @function create
     * @memberof SC_WZQ_UNREADY
     * @static
     * @param {ISC_WZQ_UNREADY=} [properties] Properties to set
     * @returns {SC_WZQ_UNREADY} SC_WZQ_UNREADY instance
     */
    SC_WZQ_UNREADY.create = function create(properties) {
        return new SC_WZQ_UNREADY(properties);
    };

    /**
     * Encodes the specified SC_WZQ_UNREADY message. Does not implicitly {@link SC_WZQ_UNREADY.verify|verify} messages.
     * @function encode
     * @memberof SC_WZQ_UNREADY
     * @static
     * @param {ISC_WZQ_UNREADY} m SC_WZQ_UNREADY message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_WZQ_UNREADY.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.seat != null && Object.hasOwnProperty.call(m, "seat"))
            w.uint32(8).int32(m.seat);
        return w;
    };

    /**
     * Decodes a SC_WZQ_UNREADY message from the specified reader or buffer.
     * @function decode
     * @memberof SC_WZQ_UNREADY
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_WZQ_UNREADY} SC_WZQ_UNREADY
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_WZQ_UNREADY.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_WZQ_UNREADY();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.seat = r.int32();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for SC_WZQ_UNREADY
     * @function getTypeUrl
     * @memberof SC_WZQ_UNREADY
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_WZQ_UNREADY.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_WZQ_UNREADY";
    };

    return SC_WZQ_UNREADY;
})();

$root.SC_WZQ_GAME_START = (function() {

    /**
     * Properties of a SC_WZQ_GAME_START.
     * @exports ISC_WZQ_GAME_START
     * @interface ISC_WZQ_GAME_START
     * @property {number|null} [curOpSeat] SC_WZQ_GAME_START curOpSeat
     */

    /**
     * Constructs a new SC_WZQ_GAME_START.
     * @exports SC_WZQ_GAME_START
     * @classdesc Represents a SC_WZQ_GAME_START.
     * @implements ISC_WZQ_GAME_START
     * @constructor
     * @param {ISC_WZQ_GAME_START=} [p] Properties to set
     */
    function SC_WZQ_GAME_START(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_WZQ_GAME_START curOpSeat.
     * @member {number} curOpSeat
     * @memberof SC_WZQ_GAME_START
     * @instance
     */
    SC_WZQ_GAME_START.prototype.curOpSeat = 0;

    /**
     * Creates a new SC_WZQ_GAME_START instance using the specified properties.
     * @function create
     * @memberof SC_WZQ_GAME_START
     * @static
     * @param {ISC_WZQ_GAME_START=} [properties] Properties to set
     * @returns {SC_WZQ_GAME_START} SC_WZQ_GAME_START instance
     */
    SC_WZQ_GAME_START.create = function create(properties) {
        return new SC_WZQ_GAME_START(properties);
    };

    /**
     * Encodes the specified SC_WZQ_GAME_START message. Does not implicitly {@link SC_WZQ_GAME_START.verify|verify} messages.
     * @function encode
     * @memberof SC_WZQ_GAME_START
     * @static
     * @param {ISC_WZQ_GAME_START} m SC_WZQ_GAME_START message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_WZQ_GAME_START.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.curOpSeat != null && Object.hasOwnProperty.call(m, "curOpSeat"))
            w.uint32(8).int32(m.curOpSeat);
        return w;
    };

    /**
     * Decodes a SC_WZQ_GAME_START message from the specified reader or buffer.
     * @function decode
     * @memberof SC_WZQ_GAME_START
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_WZQ_GAME_START} SC_WZQ_GAME_START
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_WZQ_GAME_START.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_WZQ_GAME_START();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.curOpSeat = r.int32();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for SC_WZQ_GAME_START
     * @function getTypeUrl
     * @memberof SC_WZQ_GAME_START
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_WZQ_GAME_START.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_WZQ_GAME_START";
    };

    return SC_WZQ_GAME_START;
})();

$root.CS_WZQ_DOWN_PIECE = (function() {

    /**
     * Properties of a CS_WZQ_DOWN_PIECE.
     * @exports ICS_WZQ_DOWN_PIECE
     * @interface ICS_WZQ_DOWN_PIECE
     * @property {number|null} [x] CS_WZQ_DOWN_PIECE x
     * @property {number|null} [y] CS_WZQ_DOWN_PIECE y
     */

    /**
     * Constructs a new CS_WZQ_DOWN_PIECE.
     * @exports CS_WZQ_DOWN_PIECE
     * @classdesc Represents a CS_WZQ_DOWN_PIECE.
     * @implements ICS_WZQ_DOWN_PIECE
     * @constructor
     * @param {ICS_WZQ_DOWN_PIECE=} [p] Properties to set
     */
    function CS_WZQ_DOWN_PIECE(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * CS_WZQ_DOWN_PIECE x.
     * @member {number} x
     * @memberof CS_WZQ_DOWN_PIECE
     * @instance
     */
    CS_WZQ_DOWN_PIECE.prototype.x = 0;

    /**
     * CS_WZQ_DOWN_PIECE y.
     * @member {number} y
     * @memberof CS_WZQ_DOWN_PIECE
     * @instance
     */
    CS_WZQ_DOWN_PIECE.prototype.y = 0;

    /**
     * Creates a new CS_WZQ_DOWN_PIECE instance using the specified properties.
     * @function create
     * @memberof CS_WZQ_DOWN_PIECE
     * @static
     * @param {ICS_WZQ_DOWN_PIECE=} [properties] Properties to set
     * @returns {CS_WZQ_DOWN_PIECE} CS_WZQ_DOWN_PIECE instance
     */
    CS_WZQ_DOWN_PIECE.create = function create(properties) {
        return new CS_WZQ_DOWN_PIECE(properties);
    };

    /**
     * Encodes the specified CS_WZQ_DOWN_PIECE message. Does not implicitly {@link CS_WZQ_DOWN_PIECE.verify|verify} messages.
     * @function encode
     * @memberof CS_WZQ_DOWN_PIECE
     * @static
     * @param {ICS_WZQ_DOWN_PIECE} m CS_WZQ_DOWN_PIECE message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    CS_WZQ_DOWN_PIECE.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.x != null && Object.hasOwnProperty.call(m, "x"))
            w.uint32(8).int32(m.x);
        if (m.y != null && Object.hasOwnProperty.call(m, "y"))
            w.uint32(16).int32(m.y);
        return w;
    };

    /**
     * Decodes a CS_WZQ_DOWN_PIECE message from the specified reader or buffer.
     * @function decode
     * @memberof CS_WZQ_DOWN_PIECE
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {CS_WZQ_DOWN_PIECE} CS_WZQ_DOWN_PIECE
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    CS_WZQ_DOWN_PIECE.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.CS_WZQ_DOWN_PIECE();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.x = r.int32();
                    break;
                }
            case 2: {
                    m.y = r.int32();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for CS_WZQ_DOWN_PIECE
     * @function getTypeUrl
     * @memberof CS_WZQ_DOWN_PIECE
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    CS_WZQ_DOWN_PIECE.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/CS_WZQ_DOWN_PIECE";
    };

    return CS_WZQ_DOWN_PIECE;
})();

$root.SC_WZQ_DOWN_PIECE = (function() {

    /**
     * Properties of a SC_WZQ_DOWN_PIECE.
     * @exports ISC_WZQ_DOWN_PIECE
     * @interface ISC_WZQ_DOWN_PIECE
     * @property {number|null} [code] SC_WZQ_DOWN_PIECE code
     * @property {number|null} [nextOpSeat] SC_WZQ_DOWN_PIECE nextOpSeat
     * @property {IWZQ_MAP_ITEM|null} [piece] SC_WZQ_DOWN_PIECE piece
     */

    /**
     * Constructs a new SC_WZQ_DOWN_PIECE.
     * @exports SC_WZQ_DOWN_PIECE
     * @classdesc Represents a SC_WZQ_DOWN_PIECE.
     * @implements ISC_WZQ_DOWN_PIECE
     * @constructor
     * @param {ISC_WZQ_DOWN_PIECE=} [p] Properties to set
     */
    function SC_WZQ_DOWN_PIECE(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_WZQ_DOWN_PIECE code.
     * @member {number|null|undefined} code
     * @memberof SC_WZQ_DOWN_PIECE
     * @instance
     */
    SC_WZQ_DOWN_PIECE.prototype.code = null;

    /**
     * SC_WZQ_DOWN_PIECE nextOpSeat.
     * @member {number|null|undefined} nextOpSeat
     * @memberof SC_WZQ_DOWN_PIECE
     * @instance
     */
    SC_WZQ_DOWN_PIECE.prototype.nextOpSeat = null;

    /**
     * SC_WZQ_DOWN_PIECE piece.
     * @member {IWZQ_MAP_ITEM|null|undefined} piece
     * @memberof SC_WZQ_DOWN_PIECE
     * @instance
     */
    SC_WZQ_DOWN_PIECE.prototype.piece = null;

    // OneOf field names bound to virtual getters and setters
    var $oneOfFields;

    // Virtual OneOf for proto3 optional field
    Object.defineProperty(SC_WZQ_DOWN_PIECE.prototype, "_code", {
        get: $util.oneOfGetter($oneOfFields = ["code"]),
        set: $util.oneOfSetter($oneOfFields)
    });

    // Virtual OneOf for proto3 optional field
    Object.defineProperty(SC_WZQ_DOWN_PIECE.prototype, "_nextOpSeat", {
        get: $util.oneOfGetter($oneOfFields = ["nextOpSeat"]),
        set: $util.oneOfSetter($oneOfFields)
    });

    // Virtual OneOf for proto3 optional field
    Object.defineProperty(SC_WZQ_DOWN_PIECE.prototype, "_piece", {
        get: $util.oneOfGetter($oneOfFields = ["piece"]),
        set: $util.oneOfSetter($oneOfFields)
    });

    /**
     * Creates a new SC_WZQ_DOWN_PIECE instance using the specified properties.
     * @function create
     * @memberof SC_WZQ_DOWN_PIECE
     * @static
     * @param {ISC_WZQ_DOWN_PIECE=} [properties] Properties to set
     * @returns {SC_WZQ_DOWN_PIECE} SC_WZQ_DOWN_PIECE instance
     */
    SC_WZQ_DOWN_PIECE.create = function create(properties) {
        return new SC_WZQ_DOWN_PIECE(properties);
    };

    /**
     * Encodes the specified SC_WZQ_DOWN_PIECE message. Does not implicitly {@link SC_WZQ_DOWN_PIECE.verify|verify} messages.
     * @function encode
     * @memberof SC_WZQ_DOWN_PIECE
     * @static
     * @param {ISC_WZQ_DOWN_PIECE} m SC_WZQ_DOWN_PIECE message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_WZQ_DOWN_PIECE.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.code != null && Object.hasOwnProperty.call(m, "code"))
            w.uint32(8).int32(m.code);
        if (m.nextOpSeat != null && Object.hasOwnProperty.call(m, "nextOpSeat"))
            w.uint32(16).int32(m.nextOpSeat);
        if (m.piece != null && Object.hasOwnProperty.call(m, "piece"))
            $root.WZQ_MAP_ITEM.encode(m.piece, w.uint32(26).fork()).ldelim();
        return w;
    };

    /**
     * Decodes a SC_WZQ_DOWN_PIECE message from the specified reader or buffer.
     * @function decode
     * @memberof SC_WZQ_DOWN_PIECE
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_WZQ_DOWN_PIECE} SC_WZQ_DOWN_PIECE
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_WZQ_DOWN_PIECE.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_WZQ_DOWN_PIECE();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.code = r.int32();
                    break;
                }
            case 2: {
                    m.nextOpSeat = r.int32();
                    break;
                }
            case 3: {
                    m.piece = $root.WZQ_MAP_ITEM.decode(r, r.uint32());
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for SC_WZQ_DOWN_PIECE
     * @function getTypeUrl
     * @memberof SC_WZQ_DOWN_PIECE
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_WZQ_DOWN_PIECE.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_WZQ_DOWN_PIECE";
    };

    return SC_WZQ_DOWN_PIECE;
})();

$root.SC_WZQ_GAME_SETTLE = (function() {

    /**
     * Properties of a SC_WZQ_GAME_SETTLE.
     * @exports ISC_WZQ_GAME_SETTLE
     * @interface ISC_WZQ_GAME_SETTLE
     * @property {number|null} [winner] SC_WZQ_GAME_SETTLE winner
     */

    /**
     * Constructs a new SC_WZQ_GAME_SETTLE.
     * @exports SC_WZQ_GAME_SETTLE
     * @classdesc Represents a SC_WZQ_GAME_SETTLE.
     * @implements ISC_WZQ_GAME_SETTLE
     * @constructor
     * @param {ISC_WZQ_GAME_SETTLE=} [p] Properties to set
     */
    function SC_WZQ_GAME_SETTLE(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * SC_WZQ_GAME_SETTLE winner.
     * @member {number} winner
     * @memberof SC_WZQ_GAME_SETTLE
     * @instance
     */
    SC_WZQ_GAME_SETTLE.prototype.winner = 0;

    /**
     * Creates a new SC_WZQ_GAME_SETTLE instance using the specified properties.
     * @function create
     * @memberof SC_WZQ_GAME_SETTLE
     * @static
     * @param {ISC_WZQ_GAME_SETTLE=} [properties] Properties to set
     * @returns {SC_WZQ_GAME_SETTLE} SC_WZQ_GAME_SETTLE instance
     */
    SC_WZQ_GAME_SETTLE.create = function create(properties) {
        return new SC_WZQ_GAME_SETTLE(properties);
    };

    /**
     * Encodes the specified SC_WZQ_GAME_SETTLE message. Does not implicitly {@link SC_WZQ_GAME_SETTLE.verify|verify} messages.
     * @function encode
     * @memberof SC_WZQ_GAME_SETTLE
     * @static
     * @param {ISC_WZQ_GAME_SETTLE} m SC_WZQ_GAME_SETTLE message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    SC_WZQ_GAME_SETTLE.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.winner != null && Object.hasOwnProperty.call(m, "winner"))
            w.uint32(8).int32(m.winner);
        return w;
    };

    /**
     * Decodes a SC_WZQ_GAME_SETTLE message from the specified reader or buffer.
     * @function decode
     * @memberof SC_WZQ_GAME_SETTLE
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {SC_WZQ_GAME_SETTLE} SC_WZQ_GAME_SETTLE
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    SC_WZQ_GAME_SETTLE.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.SC_WZQ_GAME_SETTLE();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.winner = r.int32();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for SC_WZQ_GAME_SETTLE
     * @function getTypeUrl
     * @memberof SC_WZQ_GAME_SETTLE
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    SC_WZQ_GAME_SETTLE.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/SC_WZQ_GAME_SETTLE";
    };

    return SC_WZQ_GAME_SETTLE;
})();

$root.Msg = (function() {

    /**
     * Properties of a Msg.
     * @exports IMsg
     * @interface IMsg
     * @property {number|null} [id] Msg id
     * @property {Uint8Array|null} [data] Msg data
     */

    /**
     * Constructs a new Msg.
     * @exports Msg
     * @classdesc Represents a Msg.
     * @implements IMsg
     * @constructor
     * @param {IMsg=} [p] Properties to set
     */
    function Msg(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * Msg id.
     * @member {number} id
     * @memberof Msg
     * @instance
     */
    Msg.prototype.id = 0;

    /**
     * Msg data.
     * @member {Uint8Array|null|undefined} data
     * @memberof Msg
     * @instance
     */
    Msg.prototype.data = null;

    // OneOf field names bound to virtual getters and setters
    var $oneOfFields;

    // Virtual OneOf for proto3 optional field
    Object.defineProperty(Msg.prototype, "_data", {
        get: $util.oneOfGetter($oneOfFields = ["data"]),
        set: $util.oneOfSetter($oneOfFields)
    });

    /**
     * Creates a new Msg instance using the specified properties.
     * @function create
     * @memberof Msg
     * @static
     * @param {IMsg=} [properties] Properties to set
     * @returns {Msg} Msg instance
     */
    Msg.create = function create(properties) {
        return new Msg(properties);
    };

    /**
     * Encodes the specified Msg message. Does not implicitly {@link Msg.verify|verify} messages.
     * @function encode
     * @memberof Msg
     * @static
     * @param {IMsg} m Msg message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    Msg.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.id != null && Object.hasOwnProperty.call(m, "id"))
            w.uint32(8).int32(m.id);
        if (m.data != null && Object.hasOwnProperty.call(m, "data"))
            w.uint32(18).bytes(m.data);
        return w;
    };

    /**
     * Decodes a Msg message from the specified reader or buffer.
     * @function decode
     * @memberof Msg
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {Msg} Msg
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    Msg.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.Msg();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 1: {
                    m.id = r.int32();
                    break;
                }
            case 2: {
                    m.data = r.bytes();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for Msg
     * @function getTypeUrl
     * @memberof Msg
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    Msg.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/Msg";
    };

    return Msg;
})();

$root.ERROR = (function() {

    /**
     * Properties of a ERROR.
     * @exports IERROR
     * @interface IERROR
     * @property {string|null} [msg] ERROR msg
     */

    /**
     * Constructs a new ERROR.
     * @exports ERROR
     * @classdesc Represents a ERROR.
     * @implements IERROR
     * @constructor
     * @param {IERROR=} [p] Properties to set
     */
    function ERROR(p) {
        if (p)
            for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
                if (p[ks[i]] != null)
                    this[ks[i]] = p[ks[i]];
    }

    /**
     * ERROR msg.
     * @member {string} msg
     * @memberof ERROR
     * @instance
     */
    ERROR.prototype.msg = "";

    /**
     * Creates a new ERROR instance using the specified properties.
     * @function create
     * @memberof ERROR
     * @static
     * @param {IERROR=} [properties] Properties to set
     * @returns {ERROR} ERROR instance
     */
    ERROR.create = function create(properties) {
        return new ERROR(properties);
    };

    /**
     * Encodes the specified ERROR message. Does not implicitly {@link ERROR.verify|verify} messages.
     * @function encode
     * @memberof ERROR
     * @static
     * @param {IERROR} m ERROR message or plain object to encode
     * @param {$protobuf.Writer} [w] Writer to encode to
     * @returns {$protobuf.Writer} Writer
     */
    ERROR.encode = function encode(m, w) {
        if (!w)
            w = $Writer.create();
        if (m.msg != null && Object.hasOwnProperty.call(m, "msg"))
            w.uint32(18).string(m.msg);
        return w;
    };

    /**
     * Decodes a ERROR message from the specified reader or buffer.
     * @function decode
     * @memberof ERROR
     * @static
     * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from
     * @param {number} [l] Message length if known beforehand
     * @returns {ERROR} ERROR
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    ERROR.decode = function decode(r, l) {
        if (!(r instanceof $Reader))
            r = $Reader.create(r);
        var c = l === undefined ? r.len : r.pos + l, m = new $root.ERROR();
        while (r.pos < c) {
            var t = r.uint32();
            switch (t >>> 3) {
            case 2: {
                    m.msg = r.string();
                    break;
                }
            default:
                r.skipType(t & 7);
                break;
            }
        }
        return m;
    };

    /**
     * Gets the default type url for ERROR
     * @function getTypeUrl
     * @memberof ERROR
     * @static
     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns {string} The default type url
     */
    ERROR.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
        if (typeUrlPrefix === undefined) {
            typeUrlPrefix = "type.googleapis.com";
        }
        return typeUrlPrefix + "/ERROR";
    };

    return ERROR;
})();

module.exports = $root;
